package hotel.mensagens;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

import o2b.IStream;
import o2b.MarshallableException;
import o2b.Stream;

public class EnviaDados {
	public static Mensagem enviarMensagem(Mensagem msgSaida) {
		Mensagem msgEntrada = new Mensagem();
		
		try {
			// Cria um novo socket
			Socket socket = new Socket("localhost",12345);
			
			// Pega a entrada e saída do socket
			OutputStream os = socket.getOutputStream();
			InputStream is = socket.getInputStream();

			// Cria uma entrada e saída do O2B
			IStream streamSaida = new Stream();
			IStream streamEntrada = new Stream();

			// 
			msgSaida.marshal(streamSaida);
			os.write(streamSaida.getBytes());
			os.close();
			
			ByteArrayOutputStream bytesCliente = new ByteArrayOutputStream();

			int aux;
			while ((aux = is.read()) != -1) {
				bytesCliente.write(aux);
			}
			byte[] dadosCliente = bytesCliente.toByteArray();


			is.close();


			streamEntrada.fill(dadosCliente);
			msgEntrada.unmarshal(streamEntrada);

			switch (msgEntrada.getTipo()) {
				case TipoMensagem.LOGIN:
					break;

				/*
				case TipoMensagem.CLIENTE:
					break;

				case TipoMensagem.LISTARTODOSAPS:
					break;

				case TipoMensagem.LISTAAPARTAMENTOS:
					ListaApartamentos listaApartamentos = new ListaApartamentos();
					listaApartamentos.unmarshal(streamEntrada);
					return listaApartamentos;

				case TipoMensagem.RESPOSTALOGIN:
					break;

				case TipoMensagem.BUSCAR:
					break;
					
					*/

				default:
					return msgEntrada;
			}

			socket.close();
			
		} catch (IOException iex) {
			iex.printStackTrace();
			return null;
		} catch (MarshallableException me) {
			me.printStackTrace();
			return null;
		}

		return msgEntrada;
	}
}
